soc: apple: {sep,aop}: log the endpoints and services the firmware offers - #593
soc: apple: {sep,aop}: log the endpoints and services the firmware offers#593brentkearney wants to merge 1 commit into
Conversation
6d892dc to
f910ad0
Compare
|
Rebased the branch with one addition and runtime results from the patched kernel on the Addition: the first boot showed that SEPOS sends a second discovery message (type 1) per endpoint, which the re-enabled Runtime: No |
…fers
Both drivers discard the coprocessor's own description of what it offers,
which makes the hardware harder to work with than it needs to be.
sep.rs receives two messages per SEPOS endpoint on the discovery endpoint
and drops both. Type 0 carries the endpoint's four-character name and
number; the dev_info! that would print it in process_discover_msg() is
commented out, along with the two constants it needs. Type 1 is what
AppleSEPManager calls the "OOL advertisement": the endpoint's out-of-line
buffer size bounds, in pages, packed into the data word. The driver has no
constant for it, so it would fall through to the (also commented out)
"Unknown discovery message type" warning. Nothing else in the driver
exposes any of this, so the set of endpoints SEPOS actually starts has
never been visible from Linux on any board.
aop.rs matches announced EPIC service names against "aop-audio", "las" and
"als" and returns silently for anything else, so services with no driver
leave no trace either.
Enable the SEP log, name and log the OOL advertisement so that the unknown
type warning only fires for genuinely unknown messages, and add the AOP
log. All of it fires once per boot during probe, alongside the RTKit syslog
output these coprocessors already emit at the same level.
dev_dbg! would be the tidier choice but is not usable here: Rust's
dev_dbg! routes to Device::pr_dbg(), which is gated on
cfg!(debug_assertions), so it compiles to nothing unless
CONFIG_RUST_DEBUG_ASSERTIONS is set and it does not participate in dynamic
debug.
On an Apple MacBook Pro (16-inch, 2021), t6000/j316s, the SEP log yields:
Got endpoint Ok("hibe") at 20
Endpoint 20 OOL buffer sizes 0x01010101
Got endpoint Ok("stac") at 24
Endpoint 24 OOL buffer sizes 0x02020202
Got endpoint Ok("cntl") at 0
Endpoint 0 OOL buffer sizes 0x00000000
Got endpoint Ok("xarm") at 19
Endpoint 19 OOL buffer sizes 0x02020202
Got endpoint Ok("xars") at 16
Endpoint 16 OOL buffer sizes 0x02020202
Got endpoint Ok("pnon") at 21
Endpoint 21 OOL buffer sizes 0x02020404
Got endpoint Ok("hdcp") at 14
Endpoint 14 OOL buffer sizes 0x01010101
and the AOP log, for a board whose AOP node only binds aop-audio and als:
No driver for service Ok("wakehint") on endpoint 37
No driver for service Ok("accel") on endpoint 33
No driver for service Ok("gyro") on endpoint 34
No driver for service Ok("als-temp") on endpoint 43
No driver for service Ok("cma") on endpoint 42
No driver for service Ok("devmotion6") on endpoint 41
No driver for service Ok("SPUApp") on endpoint 32
No driver for service Ok("aop-voicetrigger") on endpoint 40
f910ad0 to
d45108a
Compare
Both drivers discard the coprocessor's own description of what it offers. This change logs it once per boot during
probe(), at the same level as the RTKit syslog output these coprocessors already emit.Changes
sep.rs: enable thedev_info!inprocess_discover_msg()that prints each advertised SEPOS endpoint (four-character name and endpoint number), and thedev_warn!for unknown discovery message types. Restores the two constants they need,MSG_PARAM_SHIFTandMSG_PARAM_MASK.sep.rs: name discovery message type 1 (MSG_ADVERTISE_OOL, whatAppleSEPManagercalls the "OOL advertisement": the endpoint's out-of-line buffer size bounds in pages, packed into the data word) and log it, so the unknown-type warning only fires for genuinely unknown messages. SEPOS sends one per endpoint right after the type 0 message; without this it would trip the newly enabled warning seven times per boot.aop.rs: inregister_service(), log the name and endpoint of any announced EPIC service that is notaop-audio,las, oralsbefore returning.dev_dbg!is not an option here: Rust'sdev_dbg!routes toDevice::pr_dbg(), which is gated oncfg!(debug_assertions)and does not participate in dynamic debug, so it compiles to nothing unlessCONFIG_RUST_DEBUG_ASSERTIONSis set.Why
The set of endpoints SEPOS actually starts has never been visible from Linux on any board, and AOP services with no driver leave no trace. Both lists are the first thing anyone working on these coprocessors needs. On an
apple,t6000/j316sMacBook Pro (16-inch, 2021) the patched kernel prints, during probe:and, on the same board, whose AOP node binds only
aop-audioandals:Testing
asahi-7.1.6-1with rustc 1.93.1:drivers/soc/apple/sep.oandaop.obuild before and after.CLIPPY=1introduces no new warnings;rustfmt --checkpasses.j316sabove withasahi-7.1.6-1plus this patch,sepnode enabled: the output above is the completeapple_sep/apple_aopnon-RTKit output of one boot. NoUnknown discovery message typewarning fires, so types 0 and 1 are the only discovery messages this SEPOS sends. Endpoint set matches an earlier kprobe capture from the unpatched driver.Independent of #592; applies to
asahi-wipin either order.